home *** CD-ROM | disk | FTP | other *** search
- Path: xanth!nic.MR.NET!hal!ncoast!allbery
- From: jef@helios.ee.lbl.gov (Jef Poskanzer)
- Newsgroups: comp.sources.misc
- Subject: v05i043: portable bitmap routines (3 of 5)
- Message-ID: <8811010237.AA02698@helios.ee.lbl.gov>
- Date: 9 Nov 88 02:38:22 GMT
- Sender: allbery@ncoast.UUCP
- Reply-To: jef@helios.ee.lbl.gov (Jef Poskanzer)
- Lines: 1937
- Approved: allbery@ncoast.UUCP
-
- Posting-number: Volume 5, Issue 43
- Submitted-by: "Jef Poskanzer" <jef@helios.ee.lbl.gov>
- Archive-name: pbm3/Part3
-
- [Yuck. I'd prefer real subject lines. ++bsa]
-
- #! /bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #! /bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # pbmfliptb.c
- # pbmfliptb.1
- # pbminvert.c
- # pbminvert.1
- # pbmcrop.c
- # pbmcrop.1
- # pbmtrnspos.c
- # pbmtrnspos.1
- # pbmcut.c
- # pbmcut.1
- # pbmpaste.c
- # pbmpaste.1
- # xxxtopbm.c
- # xxxtopbm.1
- # pbmenlarge.c
- # pbmenlarge.1
- # pbmmake.c
- # pbmmake.1
- # pbmtolj.c
- # pbmtolj.1
- # pbmtomacp.c
- # This archive created: Mon Oct 31 18:33:35 1988
- # By: Jef Poskanzer (Paratheo-Anametamystikhood Of Eris Esoteric, Ada Lovelace Cabal)
- export PATH; PATH=/bin:$PATH
- echo shar: extracting "'pbmfliptb.c'" '(1305 characters)'
- if test -f 'pbmfliptb.c'
- then
- echo shar: will not over-write existing file "'pbmfliptb.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmfliptb.c'
- X/* pbmfliptb.c - read a portable bitmap and flip it top for bottom
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits, b;
- X int rows, cols, row, col;
- X
- X if ( argc > 2 )
- X {
- X fprintf( stderr, "usage: %s [pbmfile]\n", argv[0] );
- X exit( 1 );
- X }
- X
- X if ( argc == 2 )
- X {
- X ifd = fopen( argv[1], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[1] );
- X exit( 1 );
- X }
- X }
- X else
- X ifd = stdin;
- X
- X bits = pbm_readpbm( ifd, &cols, &rows );
- X
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X for ( row = 0; row < rows / 2; row++ )
- X for ( col = 0; col < cols; col++ )
- X {
- X b = bits[row][col];
- X bits[row][col] = bits[rows-row-1][col];
- X bits[rows-row-1][col] = b;
- X }
- X
- X pbm_writepbm( stdout, bits, cols, rows );
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 1305 -ne "`wc -c < 'pbmfliptb.c'`"
- then
- echo shar: error transmitting "'pbmfliptb.c'" '(should have been 1305 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmfliptb.1'" '(709 characters)'
- if test -f 'pbmfliptb.1'
- then
- echo shar: will not over-write existing file "'pbmfliptb.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmfliptb.1'
- X.TH pbmfliptb 1 "31 August 1988"
- X.SH NAME
- Xpbmfliptb - flip a portable bitmap top for bottom
- X.SH SYNOPSIS
- Xpbmfliptb [pbmfile]
- X.SH DESCRIPTION
- XReads a portable bitmap as input.
- XFlips it top for bottom and produces a portable bitmap as output.
- X.SH "SEE ALSO"
- Xpbmfliplr(1), pbmtrnspos(1), pbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 709 -ne "`wc -c < 'pbmfliptb.1'`"
- then
- echo shar: error transmitting "'pbmfliptb.1'" '(should have been 709 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbminvert.c'" '(1224 characters)'
- if test -f 'pbminvert.c'
- then
- echo shar: will not over-write existing file "'pbminvert.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbminvert.c'
- X/* pbminvert.c - read a portable bitmap and invert it
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits;
- X int rows, cols, row, col;
- X
- X if ( argc > 2 )
- X {
- X fprintf( stderr, "usage: %s [pbmfile]\n", argv[0] );
- X exit( 1 );
- X }
- X
- X if ( argc == 2 )
- X {
- X ifd = fopen( argv[1], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[1] );
- X exit( 1 );
- X }
- X }
- X else
- X ifd = stdin;
- X
- X bits = pbm_readpbm( ifd, &cols, &rows );
- X
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X for ( row = 0; row < rows; row++ )
- X for ( col = 0; col < cols; col++ )
- X bits[row][col] = ( bits[row][col] == 0 ? 1 : 0 );
- X
- X pbm_writepbm( stdout, bits, cols, rows );
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 1224 -ne "`wc -c < 'pbminvert.c'`"
- then
- echo shar: error transmitting "'pbminvert.c'" '(should have been 1224 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbminvert.1'" '(672 characters)'
- if test -f 'pbminvert.1'
- then
- echo shar: will not over-write existing file "'pbminvert.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbminvert.1'
- X.TH pbminvert 1 "13 February 1988"
- X.SH NAME
- Xpbminvert - invert a portable bitmap
- X.SH SYNOPSIS
- Xpbminvert [pbmfile]
- X.SH DESCRIPTION
- XReads a portable bitmap as input.
- XInverts it black for white and produces a portable bitmap as output.
- X.SH "SEE ALSO"
- Xpbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 672 -ne "`wc -c < 'pbminvert.1'`"
- then
- echo shar: error transmitting "'pbminvert.1'" '(should have been 672 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmcrop.c'" '(4241 characters)'
- if test -f 'pbmcrop.c'
- then
- echo shar: will not over-write existing file "'pbmcrop.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmcrop.c'
- X/* pbmcrop.c - crop a portable bitmap
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits, **newbits, background;
- X int argn, backdefault, c;
- X int rows, cols, row, col, newrows, newcols;
- X int top, bottom, left, right;
- X char *usage = "usage: %s [-0]/[-w]/[-1]/[-b] [pbmfile]\n";
- X
- X argn = 1;
- X backdefault = 1;
- X
- X /* Check for flags. */
- X if ( argn < argc )
- X {
- X if ( argv[argn][0] == '-' )
- X {
- X if ( ( argv[argn][1] == '0' || argv[argn][1] == 'w' ||
- X argv[argn][1] == 'W' ) && argv[argn][2] == '\0' )
- X {
- X backdefault = 0;
- X background = 0;
- X }
- X else if ( ( argv[argn][1] == '1' || argv[argn][1] == 'b' ||
- X argv[argn][1] == 'B' ) && argv[argn][2] == '\0' )
- X {
- X backdefault = 0;
- X background = 1;
- X }
- X else
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X }
- X }
- X
- X if ( argn == argc )
- X ifd = stdin;
- X else
- X {
- X ifd = fopen( argv[argn], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[argn] );
- X exit( 1 );
- X }
- X argn++;
- X }
- X bits = pbm_readpbm( ifd, &cols, &rows );
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X if ( argn != argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X
- X if ( backdefault )
- X {
- X /* Guess what the background is by looking for an edge of
- X ** all one color.
- X */
- X c = 0;
- X for ( col = 0; col < cols; col++ )
- X c += bits[0][col];
- X if ( c == 0 )
- X background = 0;
- X else if ( c == cols )
- X background = 1;
- X else
- X {
- X c = 0;
- X for ( col = 0; col < cols; col++ )
- X c += bits[rows - 1][col];
- X if ( c == 0 )
- X background = 0;
- X else if ( c == cols )
- X background = 1;
- X else
- X {
- X c = 0;
- X for ( row = 0; row < rows; row++ )
- X c += bits[row][0];
- X if ( c == 0 )
- X background = 0;
- X else if ( c == rows )
- X background = 1;
- X else
- X {
- X c = 0;
- X for ( row = 0; row < rows; row++ )
- X c += bits[row][cols - 1];
- X if ( c == 0 )
- X background = 0;
- X else if ( c == rows )
- X background = 1;
- X else
- X {
- X fprintf( stderr, "(nothing to crop, continuing)\n" );
- X background = 0; /* arbitrary */
- X }
- X }
- X }
- X }
- X }
- X
- X /* Find first non-background line. */
- X for ( top = 0; top < rows; top++ )
- X for ( col = 0; col < cols; col++ )
- X if ( bits[top][col] != background )
- X goto gottop;
- Xgottop:
- X
- X /* Find last non-background line. */
- X for ( bottom = rows - 1; bottom >= top; bottom-- )
- X for ( col = 0; col < cols; col++ )
- X if ( bits[bottom][col] != background )
- X goto gotbottom;
- Xgotbottom:
- X
- X /* Find first non-background column. */
- X for ( left = 0; left < cols; left++ )
- X for ( row = top; row <= bottom; row++ )
- X if ( bits[row][left] != background )
- X goto gotleft;
- Xgotleft:
- X
- X /* Find last non-background column. */
- X for ( right = cols - 1; right > left; right-- )
- X for ( row = top; row <= bottom; row++ )
- X if ( bits[row][right] != background )
- X goto gotright;
- Xgotright:
- X
- X if ( top > 0 )
- X fprintf( stderr, "(cropping %d %d-rows off the top)\n",
- X top, background );
- X if ( bottom < rows - 1 )
- X fprintf( stderr, "(cropping %d %d-rows off the bottom)\n",
- X rows - 1 - bottom, background );
- X if ( left > 0 )
- X fprintf( stderr, "(cropping %d %d-cols off the left)\n",
- X left, background );
- X if ( right < cols - 1 )
- X fprintf( stderr, "(cropping %d %d-cols off the right)\n",
- X cols - 1 - right, background );
- X
- X /* Now copy into a new array. */
- X newcols = right - left + 1;
- X newrows = bottom - top + 1;
- X newbits = pbm_allocarray( newcols, newrows );
- X for ( row = top; row <= bottom; row++ )
- X for ( col = left; col <= right; col++ )
- X newbits[row-top][col-left] = bits[row][col];
- X
- X pbm_writepbm( stdout, newbits, newcols, newrows );
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 4241 -ne "`wc -c < 'pbmcrop.c'`"
- then
- echo shar: error transmitting "'pbmcrop.c'" '(should have been 4241 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmcrop.1'" '(837 characters)'
- if test -f 'pbmcrop.1'
- then
- echo shar: will not over-write existing file "'pbmcrop.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmcrop.1'
- X.TH pbmcrop 1 "31 August 1988"
- X.SH NAME
- Xpbmcrop - crop a portable bitmap
- X.SH SYNOPSIS
- Xpbmcrop [-0]/[-w]/[-1]/[-b] [pbmfile]
- X.SH DESCRIPTION
- XReads a portable bitmap as input.
- XRemoves edges that are the background color,
- Xand produces a portable bitmap as output.
- XBy default, it makes a guess as to what the background
- Xcolor is.
- XYou can override the default with the -0/-w and -1/-b flags.
- X.SH "SEE ALSO"
- Xpbmcut(1), pbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 837 -ne "`wc -c < 'pbmcrop.1'`"
- then
- echo shar: error transmitting "'pbmcrop.1'" '(should have been 837 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmtrnspos.c'" '(1332 characters)'
- if test -f 'pbmtrnspos.c'
- then
- echo shar: will not over-write existing file "'pbmtrnspos.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmtrnspos.c'
- X/* pbmtrnspos.c - read a portable bitmap and transpose it x for y
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits, **newbits;
- X int rows, cols, row, col;
- X
- X if ( argc > 2 )
- X {
- X fprintf( stderr, "usage: %s [pbmfile]\n", argv[0] );
- X exit( 1 );
- X }
- X
- X if ( argc == 2 )
- X {
- X ifd = fopen( argv[1], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[1] );
- X exit( 1 );
- X }
- X }
- X else
- X ifd = stdin;
- X
- X bits = pbm_readpbm( ifd, &cols, &rows );
- X
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X newbits = pbm_allocarray( rows, cols ); /* note parameter reversal */
- X
- X for ( row = 0; row < rows; row++ )
- X for ( col = 0; col < cols; col++ )
- X newbits[col][row] = bits[row][col];
- X
- X pbm_writepbm( stdout, newbits, rows, cols ); /* reversed again */
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 1332 -ne "`wc -c < 'pbmtrnspos.c'`"
- then
- echo shar: error transmitting "'pbmtrnspos.c'" '(should have been 1332 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmtrnspos.1'" '(1035 characters)'
- if test -f 'pbmtrnspos.1'
- then
- echo shar: will not over-write existing file "'pbmtrnspos.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmtrnspos.1'
- X.TH pbmtrnspos 1 "31 August 1988"
- X.SH NAME
- Xpbmtrnspos - transpose a portable bitmap x for y
- X.SH SYNOPSIS
- Xpbmtrnspos [pbmfile]
- X.SH DESCRIPTION
- XReads a portable bitmap as input.
- XTransposes it x for y and produces a portable bitmap as output.
- X.PP
- XNote that transposition is not rotation, but can be used to produce it.
- XFor example, if you wanted a 90 degree clockwise rotation, perhaps for
- Xprinting a landscape bitmap on a laser printer, you could
- Xdo 'pbmtrnspos | pbmfliplr' or 'pbmfliptb | pbmtrnspos'.
- XFor counter-clockwise rotation, you would use the opposite flips.
- X.SH "SEE ALSO"
- Xpbmfliplr(1), pbmfliptb(1), pbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 1035 -ne "`wc -c < 'pbmtrnspos.1'`"
- then
- echo shar: error transmitting "'pbmtrnspos.1'" '(should have been 1035 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmcut.c'" '(2606 characters)'
- if test -f 'pbmcut.c'
- then
- echo shar: will not over-write existing file "'pbmcut.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmcut.c'
- X/* pbmcut.c - cut a rectangle out of a portable bitmap
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits, **newbits;
- X int rows, cols, x, y, width, height, row, col;
- X char *usage = "usage: %s x y width height [pbmfile]\n";
- X
- X
- X if ( argc < 5 || argc > 6 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X
- X if ( sscanf( argv[1], "%d", &x ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[2], "%d", &y ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[3], "%d", &width ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[4], "%d", &height ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X
- X if ( x < 0 )
- X {
- X fprintf( stderr, "x is less than 0\n" );
- X exit( 1 );
- X }
- X if ( y < 0 )
- X {
- X fprintf( stderr, "y is less than 0\n" );
- X exit( 1 );
- X }
- X if ( width < 1 )
- X {
- X fprintf( stderr, "width is less than 1\n" );
- X exit( 1 );
- X }
- X if ( height < 1 )
- X {
- X fprintf( stderr, "height is less than 1\n" );
- X exit( 1 );
- X }
- X
- X if ( argc == 6 )
- X {
- X ifd = fopen( argv[5], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[5] );
- X exit( 1 );
- X }
- X }
- X else
- X ifd = stdin;
- X
- X bits = pbm_readpbm( ifd, &cols, &rows );
- X
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X if ( x >= cols )
- X {
- X fprintf(
- X stderr, "x is too large -- the bitmap has only %d cols\n", cols );
- X exit( 1 );
- X }
- X if ( y >= rows )
- X {
- X fprintf(
- X stderr, "y is too large -- the bitmap has only %d rows\n", rows );
- X exit( 1 );
- X }
- X if ( x + width > cols )
- X {
- X fprintf(
- X stderr, "x + width is too large by %d pixels\n", x + width - cols );
- X exit( 1 );
- X }
- X if ( y + height > rows )
- X {
- X fprintf(
- X stderr, "y + height is too large by %d pixels\n",
- X y + height - rows );
- X exit( 1 );
- X }
- X
- X newbits = pbm_allocarray( width, height );
- X for ( row = y; row < y + height; row++ )
- X for ( col = x; col < x + width; col++ )
- X newbits[row-y][col-x] = bits[row][col];
- X
- X pbm_writepbm( stdout, newbits, width, height );
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 2606 -ne "`wc -c < 'pbmcut.c'`"
- then
- echo shar: error transmitting "'pbmcut.c'" '(should have been 2606 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmcut.1'" '(726 characters)'
- if test -f 'pbmcut.1'
- then
- echo shar: will not over-write existing file "'pbmcut.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmcut.1'
- X.TH pbmcut 1 "31 August 1988"
- X.SH NAME
- Xpbmcut - cut a rectangle out of a portable bitmap
- X.SH SYNOPSIS
- Xpbmcut x y width height [pbmfile]
- X.SH DESCRIPTION
- XReads a portable bitmap as input.
- XExtracts the specified rectangle,
- Xand produces a portable bitmap as output.
- X.SH "SEE ALSO"
- Xpbmcrop(1), pbmpaste(1), pbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 726 -ne "`wc -c < 'pbmcut.1'`"
- then
- echo shar: error transmitting "'pbmcut.1'" '(should have been 726 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmpaste.c'" '(3521 characters)'
- if test -f 'pbmpaste.c'
- then
- echo shar: will not over-write existing file "'pbmpaste.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmpaste.c'
- X/* pbmpaste.c - paste a rectangle into a portable bitmap
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits1, **bits2;
- X int argn, rows1, cols1, x, y, rows2, cols2, row, col;
- X char function;
- X char *usage = "usage: %s [-r]/[-o]/[-a]/[-x] frompbmfile x y [intopbmfile]\n";
- X
- X argn = 1;
- X function = 'r';
- X
- X /* Check for flags. */
- X if ( argn < argc )
- X {
- X if ( argv[argn][0] == '-' )
- X {
- X if ( ( argv[argn][1] == 'r' || argv[argn][1] == 'R' ||
- X argv[argn][1] == 'o' || argv[argn][1] == 'O' ||
- X argv[argn][1] == 'a' || argv[argn][1] == 'A' ||
- X argv[argn][1] == 'x' || argv[argn][1] == 'X' ) &&
- X argv[argn][2] == '\0' )
- X function = argv[argn][1];
- X else
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X }
- X }
- X
- X if ( argn == argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X ifd = fopen( argv[argn], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[argn] );
- X exit( 1 );
- X }
- X bits1 = pbm_readpbm( ifd, &cols1, &rows1 );
- X fclose( ifd );
- X argn++;
- X
- X if ( argn == argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[argn], "%d", &x ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X if ( argn == argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[argn], "%d", &y ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X
- X if ( x < 0 )
- X {
- X fprintf( stderr, "x is less than 0\n" );
- X exit( 1 );
- X }
- X if ( y < 0 )
- X {
- X fprintf( stderr, "y is less than 0\n" );
- X exit( 1 );
- X }
- X
- X if ( argn == argc )
- X ifd = stdin;
- X else
- X {
- X ifd = fopen( argv[argn], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[argn] );
- X exit( 1 );
- X }
- X argn++;
- X }
- X bits2 = pbm_readpbm( ifd, &cols2, &rows2 );
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X if ( x >= cols2 )
- X {
- X fprintf(
- X stderr, "x is too large -- the second bitmap has only %d cols\n",
- X cols2 );
- X exit( 1 );
- X }
- X if ( y >= rows2 )
- X {
- X fprintf(
- X stderr, "y is too large -- the second bitmap has only %d rows\n",
- X rows2 );
- X exit( 1 );
- X }
- X if ( x + cols1 > cols2 )
- X {
- X fprintf(
- X stderr, "x + width is too large by %d pixels\n",
- X x + cols1 - cols2 );
- X exit( 1 );
- X }
- X if ( y + rows1 > rows2 )
- X {
- X fprintf(
- X stderr, "y + height is too large by %d pixels\n",
- X y + rows1 - rows2 );
- X exit( 1 );
- X }
- X
- X if ( argn != argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X
- X for ( row = 0; row < rows1; row++ )
- X for ( col = 0; col < cols1; col++ )
- X switch ( function )
- X {
- X case 'r':
- X case 'R':
- X bits2[row+y][col+x] = bits1[row][col];
- X break;
- X
- X case 'o':
- X case 'O':
- X bits2[row+y][col+x] |= bits1[row][col];
- X break;
- X
- X case 'a':
- X case 'A':
- X bits2[row+y][col+x] &= bits1[row][col];
- X break;
- X
- X case 'x':
- X case 'X':
- X bits2[row+y][col+x] ^= bits1[row][col];
- X break;
- X }
- X
- X pbm_writepbm( stdout, bits2, cols2, rows2 );
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 3521 -ne "`wc -c < 'pbmpaste.c'`"
- then
- echo shar: error transmitting "'pbmpaste.c'" '(should have been 3521 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmpaste.1'" '(1311 characters)'
- if test -f 'pbmpaste.1'
- then
- echo shar: will not over-write existing file "'pbmpaste.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmpaste.1'
- X.TH pbmpaste 1 "06 April 1988"
- X.SH NAME
- Xpbmpaste - paste a rectangle into a portable bitmap
- X.SH SYNOPSIS
- Xpbmpaste [-r]/[-o]/[-a]/[-x] frompbmfile x y [intopbmfile]
- X.SH DESCRIPTION
- XReads two portable bitmaps as input.
- XInserts the first bitmap into the second at the specified location,
- Xand produces a portable bitmap the same size as the second as output.
- XIf the second bitmap is not specified, it is read from stdin.
- X.PP
- XThe -r/-o/-a/-x flags specify the logical operation to use when doing
- Xthe paste.
- XThey stand for Replace, Or, And, and Xor, respectively.
- XThe default is replace.
- X.PP
- XThis tool is most useful in combination with pbmcut(1).
- XFor instance, if you want to edit a small segment of a large
- Xbitmap, and your bitmap editor is TOO STUPID to edit the
- Xlarge bitmap, you can cut out the segment you are interested in,
- Xedit it, and then paste it back in.
- X.SH "SEE ALSO"
- Xpbmcut(1), pbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 1311 -ne "`wc -c < 'pbmpaste.1'`"
- then
- echo shar: error transmitting "'pbmpaste.1'" '(should have been 1311 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'xxxtopbm.c'" '(2375 characters)'
- if test -f 'xxxtopbm.c'
- then
- echo shar: will not over-write existing file "'xxxtopbm.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'xxxtopbm.c'
- X/* xxxtopbm.c - read an xxx bitmap and write a portable bitmap
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits, getbit();
- X int rows, cols, padright, row, col, subcol;
- X
- X if ( argc > 2 )
- X {
- X fprintf( stderr, "usage: %s [xxxfile]\n", argv[0] );
- X exit( 1 );
- X }
- X
- X if ( argc == 2 )
- X {
- X ifd = fopen( argv[1], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[1] );
- X exit( 1 );
- X }
- X }
- X else
- X ifd = stdin;
- X
- X getinit( ifd, &cols, &rows );
- X
- X bits = pbm_allocarray( cols, rows );
- X
- X /* Compute padding to round cols up to the next multiple of 16. */
- X padright = ( ( cols + 15 ) / 16 ) * 16 - cols;
- X
- X for ( row = 0; row < rows; row++ )
- X {
- X /* Get data, bit-reversed within each byte. */
- X for ( col = 0; col < cols; col += 8 )
- X for ( subcol = col + 7; subcol >= col; subcol-- )
- X bits[row][subcol] = getbit( ifd );
- X /* Discard line padding */
- X for ( col = 0; col < padright; col ++ )
- X (void) getbit( ifd );
- X }
- X
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X pbm_writepbm( stdout, bits, cols, rows );
- X
- X exit( 0 );
- X }
- X
- X
- Xint item, bitsperitem, bitshift;
- X
- Xgetinit( file, colp, rowp )
- XFILE *file;
- Xint *colp, *rowp;
- X {
- X int i;
- X
- X if ( getc( file ) != 109 )
- X {
- X fprintf( stderr, "Bad magic number 1.\n" );
- X exit( 1 );
- X }
- X if ( getc( file ) != 1 )
- X {
- X fprintf( stderr, "Bad magic number 2.\n" );
- X exit( 1 );
- X }
- X *colp = getc( file );
- X *colp += getc( file ) << 8;
- X *rowp = getc( file );
- X *rowp += getc( file ) << 8;
- X bitsperitem = 8;
- X
- X /* Junk rest of header. */
- X for ( i = 0; i < 2; i++ )
- X (void) getc( file );
- X }
- X
- Xbit
- Xgetbit( file )
- XFILE *file;
- X {
- X bit b;
- X
- X if ( bitsperitem == 8 )
- X {
- X item = getc( file );
- X bitsperitem = 0;
- X bitshift = 7;
- X }
- X bitsperitem++;
- X b = ( item >> bitshift) & 1;
- X bitshift--;
- X return b;
- X }
- SHAR_EOF
- if test 2375 -ne "`wc -c < 'xxxtopbm.c'`"
- then
- echo shar: error transmitting "'xxxtopbm.c'" '(should have been 2375 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'xxxtopbm.1'" '(922 characters)'
- if test -f 'xxxtopbm.1'
- then
- echo shar: will not over-write existing file "'xxxtopbm.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'xxxtopbm.1'
- X.TH xxxtopbm 1 "28 August 1988"
- X.SH NAME
- Xxxxtopbm - convert "xxx" bitmaps into portable bitmaps
- X.SH SYNOPSIS
- Xxxxtopbm [xxxfile]
- X.SH DESCRIPTION
- XReads an "xxx" bitmap as input.
- XProduces a portable bitmap as output.
- X.LP
- X"xxx" bitmaps are the unknown and undocumented format found on
- Xucbvax.Berkeley.Edu in the directory pub/xbackgrounds.
- XThe arrangement of the bits is the same as for Sun rasterfiles, but
- Xthe headers are completely different.
- X.LP
- XNote that there is no pbmtoxxx tool.
- X.SH "SEE ALSO"
- Xpbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 922 -ne "`wc -c < 'xxxtopbm.1'`"
- then
- echo shar: error transmitting "'xxxtopbm.1'" '(should have been 922 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmenlarge.c'" '(1776 characters)'
- if test -f 'pbmenlarge.c'
- then
- echo shar: will not over-write existing file "'pbmenlarge.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmenlarge.c'
- X/* pbmenlarge.c - read a portable bitmap and enlarge it N times
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits, **newbits;
- X int argn, n, rows, cols, row, col, subrow, subcol;
- X char *usage = "usage: %s [-N] [pbmfile]\n";
- X
- X argn = 1;
- X n = 2;
- X
- X if ( argn < argc )
- X {
- X if ( argv[argn][0] == '-' )
- X {
- X if ( sscanf( &(argv[argn][1]), "%d", &n ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( n < 2 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X }
- X }
- X
- X if ( argn == argc )
- X ifd = stdin;
- X else
- X {
- X ifd = fopen( argv[argn], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[argn] );
- X exit( 1 );
- X }
- X argn++;
- X }
- X
- X if ( argn != argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X
- X bits = pbm_readpbm( ifd, &cols, &rows );
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X newbits = pbm_allocarray( cols * n, rows * n );
- X
- X for ( row = 0; row < rows; row++ )
- X for ( col = 0; col < cols; col++ )
- X for ( subrow = 0; subrow < n; subrow++ )
- X for ( subcol = 0; subcol < n; subcol++ )
- X newbits[row * n + subrow][col * n + subcol] =
- X bits[row][col];
- X
- X pbm_writepbm( stdout, newbits, cols * n, rows * n );
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 1776 -ne "`wc -c < 'pbmenlarge.c'`"
- then
- echo shar: error transmitting "'pbmenlarge.c'" '(should have been 1776 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmenlarge.1'" '(735 characters)'
- if test -f 'pbmenlarge.1'
- then
- echo shar: will not over-write existing file "'pbmenlarge.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmenlarge.1'
- X.TH pbmenlarge 1 "29 February 1988"
- X.SH NAME
- Xpbmenlarge - read a portable bitmap and enlarge it N times
- X.SH SYNOPSIS
- Xpbmenlarge [-N] [pbmfile]
- X.SH DESCRIPTION
- XReads a portable bitmap as input.
- XReplicates its bits N times, and produces a portable bitmap as output.
- XThe default enlargement is two.
- X.SH "SEE ALSO"
- Xpbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 735 -ne "`wc -c < 'pbmenlarge.1'`"
- then
- echo shar: error transmitting "'pbmenlarge.1'" '(should have been 735 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmmake.c'" '(2226 characters)'
- if test -f 'pbmmake.c'
- then
- echo shar: will not over-write existing file "'pbmmake.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmmake.c'
- X/* pbmmake.c - create a blank bitmap of a specified size
- X**
- X** Copyright (C) 1988 by Jef Poskanzer.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X bit color, gray, rowcolor, **bits;
- X int argn, rows, cols, row, col;
- X char *usage = "usage: %s [-0]/[-w]/[-1]/[-b]/[-g] <width> <height>\n";
- X
- X argn = 1;
- X color = 0;
- X gray = 0;
- X
- X /* Check for flags. */
- X if ( argn < argc )
- X {
- X if ( argv[argn][0] == '-' )
- X {
- X if ( ( argv[argn][1] == '0' || argv[argn][1] == 'w' ||
- X argv[argn][1] == 'W' ) && argv[argn][2] == '\0' )
- X color = 0;
- X else if ( ( argv[argn][1] == '1' || argv[argn][1] == 'b' ||
- X argv[argn][1] == 'B' ) && argv[argn][2] == '\0' )
- X color = 1;
- X else if ( ( argv[argn][1] == 'g' || argv[argn][1] == 'G' ) &&
- X argv[argn][2] == '\0' )
- X gray = 1;
- X else
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X }
- X }
- X
- X if ( argn == argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[argn], "%d", &cols ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X if ( argn == argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[argn], "%d", &rows ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn++;
- X
- X if ( argn != argc )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X
- X bits = pbm_allocarray( cols, rows );
- X
- X if ( gray )
- X rowcolor = 0; /* arbitrarily make the corner white */
- X for ( row = 0; row < rows; row++ )
- X {
- X if ( gray )
- X {
- X color = rowcolor;
- X rowcolor = 1 - rowcolor;
- X }
- X for ( col = 0; col < cols; col++ )
- X {
- X bits[row][col] = color;
- X if ( gray )
- X color = 1 - color;
- X }
- X }
- X
- X pbm_writepbm( stdout, bits, cols, rows );
- X
- X exit( 0 );
- X }
- SHAR_EOF
- if test 2226 -ne "`wc -c < 'pbmmake.c'`"
- then
- echo shar: error transmitting "'pbmmake.c'" '(should have been 2226 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmmake.1'" '(870 characters)'
- if test -f 'pbmmake.1'
- then
- echo shar: will not over-write existing file "'pbmmake.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmmake.1'
- X.TH pbmmake 1 "16 May 1988"
- X.SH NAME
- Xpbmmake - create a blank bitmap of a specified size
- X.SH SYNOPSIS
- Xpbmmake [-0]/[-w]/[-1]/[-b]/[-g] <width> <height>
- X.SH DESCRIPTION
- XProduces a portable bitmap of the specified width and height.
- XThe color defaults to 0/white.
- X.LP
- XIn addition to the usual -w/-0 for white and -b/-1 for black, this program
- Ximplements -g for gray.
- XThis gives a simple 50% gray pattern with 1's and 0's alternating.
- X.SH "SEE ALSO"
- Xpbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 870 -ne "`wc -c < 'pbmmake.1'`"
- then
- echo shar: error transmitting "'pbmmake.1'" '(should have been 870 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmtolj.c'" '(3054 characters)'
- if test -f 'pbmtolj.c'
- then
- echo shar: will not over-write existing file "'pbmtolj.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmtolj.c'
- X/* pbmtolj.c - read a portable bitmap and produce a LaserJet bitmap file
- X**
- X** based on pbmtops.c
- X**
- X** Michael Haberler HP Vienna mah@hpuviea.uucp
- X** mcvax!tuvie!mah
- X** misfeatures:
- X** no positioning
- X**
- X** Copyright (C) 1988 by Jef Poskanzer and Michael Haberler.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#ifdef OS_SYSV
- X#include <string.h>
- X#else OS_SYSV
- X#include <strings.h>
- X#endif OS_SYSV
- X#include "pbm.h"
- X
- Xint dpi = 75;
- X
- Xmain( argc, argv )
- Xint argc;
- Xchar *argv[];
- X {
- X FILE *ifd;
- X bit **bits;
- X int argn, rows, cols, rucols, padright, row, col;
- X char ch;
- X char *usage =
- X"usage: %s [-r resolution] [pbmfile]\n\t\
- Xresolution = [75|100|150|300] (dpi)\n";
- X
- X argn = 1;
- X
- X /* Check for flags. */
- X if ( argc > argn )
- X {
- X if ( argv[argn][0] == '-' )
- X {
- X if ( strcmp( argv[argn], "-r" ) == 0 )
- X {
- X if ( argc == argn + 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X if ( sscanf( argv[argn+1], "%d", &dpi ) != 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X argn += 2;
- X }
- X else
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X }
- X }
- X
- X if ( argc > argn + 1 )
- X {
- X fprintf( stderr, usage, argv[0] );
- X exit( 1 );
- X }
- X
- X if ( argc == argn + 1 )
- X {
- X ifd = fopen( argv[argn], "r" );
- X if ( ifd == NULL )
- X {
- X fprintf( stderr, "%s: can't open.\n", argv[argn] );
- X exit( 1 );
- X }
- X }
- X else
- X ifd = stdin;
- X
- X bits = pbm_readpbm( ifd, &cols, &rows );
- X
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X /* Round cols up to the nearest multiple of 8. */
- X rucols = ( cols + 7 ) / 8;
- X rucols = rucols * 8;
- X padright = rucols - cols;
- X
- X putinit( );
- X for ( row = 0; row < rows; row++ )
- X {
- X /* Transfer raster graphics */
- X printf("\033*b%dW",rucols/8);
- X for ( col = 0; col < cols; col++ )
- X putbit( bits[row][col] );
- X for ( col = 0; col < padright; col++ )
- X putbit( 0 );
- X }
- X putrest( );
- X
- X exit( 0 );
- X }
- X
- X
- Xint item, bitsperitem, bitshift, itemsperline, firstitem;
- X
- Xputinit( )
- X {
- X /* Set raster graphics resolution */
- X printf("\033*t%dR",dpi);
- X
- X /* Start raster graphics, relative adressing */
- X printf("\033*r1A");
- X
- X itemsperline = 0;
- X bitsperitem = 1;
- X item = 0;
- X bitshift = 7;
- X firstitem = 1;
- X }
- X
- Xputbit( b )
- Xbit b;
- X {
- X if ( bitsperitem == 8 ) {
- X putitem( );
- X bitshift = 7;
- X }
- X if ( b )
- X item += 1 << bitshift;
- X bitsperitem++;
- X bitshift--;
- X }
- X
- Xputrest( )
- X {
- X if ( bitsperitem > 1 )
- X putitem( );
- X
- X /* end raster graphics */
- X printf( "\033*rB" );
- X }
- X
- Xputitem( )
- X {
- X putchar( item );
- X bitsperitem = 0;
- X item = 0;
- X }
- SHAR_EOF
- if test 3054 -ne "`wc -c < 'pbmtolj.c'`"
- then
- echo shar: error transmitting "'pbmtolj.c'" '(should have been 3054 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmtolj.1'" '(862 characters)'
- if test -f 'pbmtolj.1'
- then
- echo shar: will not over-write existing file "'pbmtolj.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmtolj.1'
- X.TH pbmtolj 1 "29 August 1988"
- X.SH NAME
- Xpbmtolj - convert portable bitmaps into HP LaserJet
- X.SH SYNOPSIS
- Xpbmtolj [ -r <resolution> ] [ <pbmfile> ]
- X.SH DESCRIPTION
- XReads a portable bitmap as input.
- XProduces HP LaserJet data as output.
- X.LP
- XThe -r flag specifies the resolution of the output device, in dpi.
- XTypical values are 75, 100, 150, 300.
- XThe default is 75.
- X.LP
- XNote that there is no ljtopbm tool.
- X.SH "SEE ALSO"
- Xpbm(5)
- X.SH AUTHOR
- XCopyright (C) 1988 by Jef Poskanzer and Michael Haberler.
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted, provided
- Xthat the above copyright notice appear in all copies and that both that
- Xcopyright notice and this permission notice appear in supporting
- Xdocumentation. This software is provided "as is" without express or
- Ximplied warranty.
- SHAR_EOF
- if test 862 -ne "`wc -c < 'pbmtolj.1'`"
- then
- echo shar: error transmitting "'pbmtolj.1'" '(should have been 862 characters)'
- fi
- fi # end of overwriting check
- echo shar: extracting "'pbmtomacp.c'" '(6598 characters)'
- if test -f 'pbmtomacp.c'
- then
- echo shar: will not over-write existing file "'pbmtomacp.c'"
- else
- sed 's/^X//' << \SHAR_EOF > 'pbmtomacp.c'
- X/* pbmtomacp.c - read a portable bitmap and produce a MacPaint bitmap file
- X**
- X** Copyright (C) 1988 by Douwe vand der Schaaf.
- X**
- X** Permission to use, copy, modify, and distribute this software and its
- X** documentation for any purpose and without fee is hereby granted, provided
- X** that the above copyright notice appear in all copies and that both that
- X** copyright notice and this permission notice appear in supporting
- X** documentation. This software is provided "as is" without express or
- X** implied warranty.
- X*/
- X
- X#include <stdio.h>
- X#include "pbm.h"
- X#include "macp.h"
- X
- X#define TRUE 1
- X#define FALSE 0
- X#define EQUAL 1
- X#define UNEQUAL 0
- X
- XFILE *fdout;
- Xchar *Program;
- Xchar *usage =
- X "usage: %s [-l left] [-r right] [-b bottom] [-t top] [pbmfile]\n";
- X
- Xextern int optind;
- Xextern char *optarg;
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{ int c;
- X FILE *ifd;
- X bit **bits, **bitsr;
- X int rows, cols;
- X int left,bottom,right,top;
- X int lflg, rflg, tflg, bflg, errflg;
- X char name[100];
- Xint i,j;
- X
- X fdout = stdout;
- X Program = argv[0];
- X errflg = lflg = rflg = tflg = bflg = 0;
- X if( argc > 1 )
- X { while( ( c = getopt( argc, argv, "l:r:t:b:" ) ) != EOF )
- X switch(c)
- X {
- Xcase 'l':
- X lflg++;
- X left = atoi( optarg );
- X break;
- X
- Xcase 'r':
- X rflg++;
- X right = atoi( optarg );
- X break;
- X
- Xcase 't':
- X tflg++;
- X top = atoi( optarg );
- X break;
- X
- Xcase 'b':
- X bflg++;
- X bottom = atoi( optarg );
- X break;
- X
- Xcase '?':
- Xdefault:
- X errflg++;
- X }
- X if (errflg)
- X { fprintf( stderr, "%s: ERROR. incorrect flag\n", Program );
- X fprintf( stderr, usage, Program );
- X exit(1);
- X } }
- X
- X if ( argc - optind > 1 )
- X { fprintf( stderr, "%s: ERROR. more than 1 inputfile given.\n", Program );
- X fprintf( stderr, usage, Program );
- X exit( 2 );
- X }
- X
- X if ( optind == argc - 1 )
- X { ifd = fopen( argv[optind], "r" );
- X if ( ifd == NULL )
- X { fprintf( stderr, "%s: can't open.\n", argv[optind] );
- X exit( 3 );
- X }
- X strcpy( name, argv[optind] );
- X }
- X else
- X { ifd = stdin;
- X strcpy( name, "noname" );
- X }
- X
- X bitsr = pbm_readpbm( ifd, &cols, &rows );
- X
- X if ( ifd != stdin )
- X fclose( ifd );
- X
- X bits = pbm_allocarray( MAX_COLS, MAX_LINES );
- X
- X if( !lflg )
- X left = 0;
- X
- X if( rflg )
- X { if( right - left >= MAX_COLS )
- X right = left + MAX_COLS - 1;
- X }
- X else
- X right = ( left + MAX_COLS > cols ) ? ( cols - 1 ) : ( left + MAX_COLS - 1 );
- X
- X if( !tflg )
- X top = 0;
- X
- X if( bflg )
- X { if( bottom - top >= MAX_LINES )
- X bottom = top + MAX_LINES - 1;
- X }
- X else
- X bottom = ( top + MAX_LINES > rows ) ?
- X ( rows - 1 ) : ( top + MAX_LINES - 1 );
- X
- X if( !checkborders( top, left, bottom, right ) )
- X exit( 4 );
- X
- X fillbits( bits, bitsr, top, left, bottom, right );
- X
- X writemacp( bits );
- X
- X} /* main */
- X
- X/* - - - - - - - - - - - - - - - - - - - - - - - - - - */
- X
- Xcheckborders( top, left, bottom, right )
- Xint top, left, bottom, right;
- X{ if( right <= left || left < 0 || right - left + 1 > MAX_COLS )
- X { fprintf(stderr,"%s: error in right (= %d) and/or left (=%d)\n",
- X Program,right,left );
- X return( FALSE );
- X }
- X if( bottom <= top || top < 0 || bottom - top + 1 > MAX_LINES )
- X { fprintf(stderr,"%s: error in bottom (= %d) and/or top (=%d)\n",
- X Program,bottom,top );
- X return( FALSE );
- X }
- X return( TRUE );
- X} /* checkborders */
- X
- X/* - - - - - - - - - - - - - - - - - - - - - - - - - - */
- X
- X/* centreer het over te zenden plaatje in het MacPaint document
- X *
- X * Het plaatje wordt vanaf al of niet opgegeven (left, bottom)
- X * in een pbm bitmap van de juist macpaint afmetingen gezet,
- X * en eventueel afgekapt.
- X */
- Xfillbits( bits, bitsr, top, left, bottom, right )
- Xbit **bits, **bitsr;
- Xint top, left, bottom, right;
- X{ register bit *bi, *bir;
- X register int i, j;
- X register int bottomr, leftr, topr, rightr;
- X int width, height;
- X
- X width = right - left + 1;
- X leftr = (MAX_COLS - width) / 2;
- X rightr = leftr + width - 1;
- X
- X height = bottom - top + 1;
- X topr = ( MAX_LINES - height ) / 2;
- X bottomr = topr + height - 1;
- X
- X for( i = 0; i < topr; i++ )
- X { bi = bits[i];
- X for( j = 0; j < MAX_COLS; j++ )
- X *bi++ = 0;
- X }
- X
- X for( i = topr; i <= bottomr; i++ )
- X { bi = bits[i];
- X { for( j = 0; j < leftr; j++ )
- X *bi++ = 0;
- X bir = bitsr[ i - topr + top ];
- X for( j = leftr; j <= rightr; j++ )
- X *bi++ = bir[j - leftr + left];
- X for( j = rightr + 1; j < MAX_COLS; j++ )
- X *bi++ = 0;
- X } }
- X
- X for( i = bottomr + 1; i < MAX_LINES; i++ )
- X { bi = bits[i];
- X for( j = 0; j < MAX_COLS; j++ )
- X *bi++ = 0;
- X }
- X} /* fillbits */
- X
- X/* - - - - - - - - - - - - - - - - - - - - - - - - - - */
- X
- Xwritemacp( bits )
- Xbit **bits;
- X{ register int i;
- X bit pb[MAX_COLS * 2];
- X int npb;
- X
- X header();
- X for( i=0; i < MAX_LINES; i++ )
- X { npb = packit( pb, bits[i] );
- X sendbytes( pb, npb );
- X }
- X} /* writemacp */
- X
- X/* - - - - - - - - - - - - - - - - - - - - - - - - - - */
- X
- X/* pack regel van MacPaint doc in Apple's format
- X * return value = # of bytes in pb
- X */
- Xint
- Xpackit( pb, bits )
- Xbit *pb, *bits;
- X{ register int i, charcount, npb, newcount, flg;
- X bit temp[72];
- X bit *count, *srcb, *destb, save;
- X
- X srcb = bits; destb = temp;
- X filltemp( destb, srcb );
- X srcb = temp;
- X destb = pb;
- X npb = 0;
- X charcount = BYTES_WIDE;
- X flg = EQUAL;
- X while( charcount )
- X { save = *srcb++;
- X charcount--;
- X newcount = 1;
- X while( (*srcb == save) && charcount )
- X { srcb++;
- X newcount++;
- X charcount--;
- X }
- X if( newcount > 2 )
- X { count = destb++;
- X *count = 257 - newcount;
- X *destb++ = save;
- X npb += 2;
- X flg = EQUAL;
- X }
- X else
- X { if( flg == EQUAL )
- X { count = destb++;
- X *count = newcount - 1;
- X npb++;
- X }
- X else
- X *count += newcount;
- X while( newcount-- )
- X { *destb++ = save;
- X npb++;
- X }
- X flg = UNEQUAL;
- X } }
- X return npb;
- X} /* packit */
- X
- X/* - - - - - - - - - - - - - - - - - - - - - - - - - - */
- X
- Xfilltemp( dest, src )
- Xbit *src, *dest;
- X{ register unsigned char ch, zero, acht;
- X register int i, j;
- X
- X zero = '\0';
- X acht = 8;
- X i = BYTES_WIDE;
- X while( i-- )
- X { ch = zero;
- X j = acht;
- X while( j-- )
- X { ch <<= 1;
- X if( *src++ )
- X ch++;
- X }
- X *dest++ = ch;
- X }
- X} /* filltemp */
- X
- X/* - - - - - - - - - - - - - - - - - - - - - - - - - - */
- X
- Xsendbytes( pb, npb )
- Xbit *pb;
- Xregister int npb;
- X{ register bit *b;
- X
- X b = pb;
- X while( npb-- )
- X putc( *b++, fdout );
- X} /* sendbytes */
- X
- X/* - - - - - - - - - - - - - - - - - - - - - - - - - - */
- X
- Xheader()
- X{ register int i;
- X register char ch;
- X
- X /* header contains nothing ... */
- X ch = '\0';
- X for(i = 0; i < HEADER_LENGTH; i++ )
- X putc( ch, fdout );
- X} /* header */
- SHAR_EOF
- if test 6598 -ne "`wc -c < 'pbmtomacp.c'`"
- then
- echo shar: error transmitting "'pbmtomacp.c'" '(should have been 6598 characters)'
- fi
- fi # end of overwriting check
- # End of shell archive
- exit 0
-